package com.info.zhiduoduo.pay.sdk.transferpay.model.request;

import com.info.zhiduoduo.pay.formbean.transferpay.TransferAgentPayFormBean;

import java.math.RoundingMode;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class AgentPayReqDTO extends BaseReqDTO {

	/** 业务流水号 */
	private String businessnumber; //	是	字符	30	20110110165455000001	商户端的流水号，需保证在商户端不重复
	/** 商品名称 */
	private String subject; //	是	字符	255	电子产品(笔记本)	商品名称
	/** 交易金额 */
	private String transactionamount; //	是	数字	18,2	100.00	单位：元
	/** 银行卡号码 */
	private String bankcardnumber; //	是	字符	34
	/** 银行卡姓名 */
	private String bankcardname; //	是	字符	60	张三
	/** 银行名称 */
	private String bankname; //	是	字符	60		银行名称(必填)
	/** 银行卡类型 */
	private String bankcardtype; //	是	字符	10	个人	银行卡类型：个人、企业
	/** 银行卡借贷类型 */
	private String bankaccounttype; //	是	字符	10		银行卡借贷类型：储蓄卡、信用卡
	/** 省 */
	private String province; //	否	字符	60		省份(银行卡类型为企业时必填，个人选填)
	/** 市 */
	private String city; //	否	字符	60		城市(银行卡类型为企业时必填，个人选填)
	/** 支行 */
	private String branchbankname; //	否	字符	60		银行支行名称(银行卡类型为企业时必填，个人选填)
	/** 联行号 */
	private String banknumber; //	否	字符	12		银行联行号(选填，银行卡类型为企业时填写可提高处理效率)
	/** 回调客户端url */
	private String backurl; //	否	字符	150		付款状态通知回调地址
	/** 终端类型 */
	private String terminal; //	否	字符	50		PC、Android、IOS、WP、EPOS、POS、ETC、PARK、MJ
	/** 会员账户号 */
	private String fromaccountnumber; //	是	字符	20		会员支付账户
	/** 商户账户号 */
	private String merchantaccountnumber; //	否	字符	20		商户在传化支付开的支付账号
	/** 商品描述 */
	private String description; //	否	字符	255
	/** 业务方唯一标识 */
	private String requuid; //	否	字符	20
	/** 短信通知手机号码 */
	private String mobilenumber; //	否	字符	11		成功后收到平台发送成功的短信信息(号码错误不发送)

	public static AgentPayReqDTO of(TransferAgentPayFormBean formBean) {
		return new AgentPayReqDTO().setBusinessnumber(formBean.getTradeNo())
				.setSubject(formBean.getPurpose())
				.setTransactionamount(formBean.getTradeamount().setScale(2, RoundingMode.DOWN).toString())
				.setBankcardnumber(formBean.getAcctNo())
				.setBankcardname(formBean.getAcctName())
				.setBankname(formBean.getBankName())
				.setBankcardtype(formBean.getAcctType() == 1 ? "个人" : "企业")
				.setBankaccounttype("储蓄卡")
				.setProvince(formBean.getProvince())
				.setCity(formBean.getCity())
				.setBranchbankname(formBean.getBranchNo())
				.setBanknumber(formBean.getBankNo());
	}
}
